import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/request")
public class RequestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 上面这个操作也是必要的. 显式告诉浏览器, 你拿到的数据是 html.
        // 告诉浏览器你要拿html的方式显示这些内容,这样也就保证了下边可以用br换行,应为此时页面是html
        resp.setContentType("text/html");
        // 调用 req 的各个方法, 把得到的结果汇总到一个字符串中, 统一返回到页面上.
        StringBuilder respBody = new StringBuilder();

        //不能使用'\n' 应为\n是string的换行,而不是html的换行,br标签是html换行
        // 下列内容是在浏览器上按照 html 的方式来展示的. 此时 \n 在 html 中并不是换行.
        // 而使用 <br> 标签表示换行
        respBody.append(req.getProtocol());
        respBody.append("<br>");
        respBody.append(req.getMethod());
        respBody.append("<br>");
        respBody.append(req.getRequestURI());
        respBody.append("<br>");
        respBody.append(req.getContextPath());
        respBody.append("<br>");
        respBody.append(req.getQueryString());
        respBody.append("<br>");

        // 拼接 header
        Enumeration<String> headers = req.getHeaderNames();
        while (headers.hasMoreElements()) {//迭代器遍历风格代码
            String header = headers.nextElement();
            respBody.append(header + ": " + req.getHeader(header));
            respBody.append("<br>");
        }

        // 统一返回结果
        resp.getWriter().write(respBody.toString());
    }
}
